

public class SubstringExtractor {

    /**
     * 检测是否是中文
     * @param c 字符
     * @return 是否是中文
     */
    private static boolean isChinese(char c) {
        // 检测常用汉字范围（包括基本汉字和扩展汉字）
        Character.UnicodeBlock block = Character.UnicodeBlock.of(c);
        return block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
                || block == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                || block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
                || block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B;
    }

    /**
     * 提取编码 
     * @param input 输入描述以及编码
     * @return 编码
     */
    public static String extractCode(String input) {
        if (input == null || input.isEmpty()) return "";

        // 找到最后一个中文字符的位置
        int lastChineseIndex = -1;
        char[] chars = input.toCharArray();
        for (int i = chars.length - 1; i >= 0; i--) {
            if (isChinese(chars[i])) {
                lastChineseIndex = i;
                break;
            }
        }
        if (lastChineseIndex == -1) return "";  // 没有中文

        // 从中文后开始找到最后一个逗号
        int lastCommaIndex = input.indexOf(',', lastChineseIndex);
        if (lastCommaIndex == -1) lastCommaIndex = input.length();

        // 提取编码部分并去除空白
        String code = input.substring(lastChineseIndex + 1, lastCommaIndex);
        return code.replaceAll("\\s", "");  // 移除所有空白字符
    }


    /**
     * 提取a和b之间的字符串
     * @param input 输入字符串，包含a和b
     * @param a 开始字符串
     * @param b 结束字符串
     * @return a和b之间的字符串
     */
    public static String extractBetweenAAndB(String input, String a, String b) {
        if (input == null || a == null || b == null || input.isEmpty()) {
            return "";
        }

        // 1. 查找最后一个b的位置
        int lastBIndex = input.lastIndexOf(b);
        if (lastBIndex == -1) return "";  // 无b标记

        // 2. 在b之前查找最后一个a
        int lastAIndex = input.lastIndexOf(a, lastBIndex - 1);
        if (lastAIndex == -1) return "";  // b前无a标记

        // 3. 提取a结束到b开始之间的子串并移除空格
        int start = lastAIndex + a.length();
        int end = lastBIndex;
        String raw = input.substring(start, end);
        return raw.replaceAll("\\s", "");  // \\s匹配所有空白字符
    }

}